console.log('controller-admin exe');
const AdminModule = require('../database/book') // 导入操作数据库的模型对象
const BorrowModule = require('../database/borrow')
const PublicInfoModule = require('../database/public_Info')

const { addBookNum } = require('../wrapperFunction/index')
const { queryHistory } = require('./common')

// 查询数据库
const query = async (req, res, next) => {
  try {
    // 获取查询参数
    const queryParam = req.query
    console.log('查询参数为', queryParam);
    // result 目前是由模型对象的实例组成的数组
    let result = await AdminModule.findAll({
      where: {
        book_name: queryParam.book_name
      }
    })
    // 转成josn数据返回至客户端
    result = result.map(item => {
      return item.toJSON()
    })
    // console.log('result', result);
    res.status(200).json({
      msg: '查询数据成功',
      info: result
    })
  } catch (error) {
    next({ msg: 'controller-查询数据库中数据出错', error });
  }
}

// 改
const alter = async (req, res, next) => {
  try {
    // 获取要改哪个图书的信息
    const data = await AdminModule.findOne({
      where: {
        book_id: req.body.book_id
      }
    })

    // 遍历传过来的对象，基于传过来的对象对数据库进行更改(对data的更改目前还是本地更改)
    Object.keys(req.body).forEach(key => {
      console.log(key, '---', req.body[key]);
      data[key] = req.body[key]
    })
    // 把对data的本地更改提交到数据库
    const result = await data.save()

    // console.log('result', result);
    // console.log('update book', data);


    res.status(201).json({
      msg: '修改成功',
      info: result
    })
  } catch (error) {
    next({ msg: 'controller-更改数据库中数据出错', error });
  }
}

// 增
const increase = async (req, res, next) => {
  try {
    console.log(req.body);
    const data1 = await AdminModule.create(req.body)
    // console.log('data1', typeof data1);
    // console.log('data1', typeof data1.toJSON());
    res.status(201).json({
      msg: '增加数据成功',
      info: data1
    })
  } catch (error) {
    next({ msg: 'controller-增加数据至数据库出错', error });
  }
}

// 删
const strikeOut = async (req, res, next) => {
  try {
    let data = await AdminModule.findOne({
      where: {
        book_id: req.body.book_id
      }
    })
    const result = await data.destroy()
    res.status(200).json({
      msg: '删除成功',
      info: result
    })
  } catch (error) {
    next({ msg: 'controller-从数据库删除数据出错', error });
  }
}


// 借阅记录查询-管理员接口
const queryBorrow = async function (req, res, next) {
  try {
    queryHistory(req, res)
  } catch (error) {
    console.log('查询借阅记录管理员接口调用失败', error);
    next({ msg: '查询借阅记录管理员接口调用失败', error })
  }
}

// 归还图书
const revert = async (req, res, next) => {
  try {
    let data = await BorrowModule.findOne({
      where: {
        user_name: req.body.user_name,
        book_id: req.body.book_id
      }
    })
    // 逻辑删除借阅表中的记录
    const result = await data.update({ is_return: true })
    // 图书的数量 +1
    addBookNum(req.body.book_id, next)
    res.status(200).json({
      msg: '图书归还成功',
      info: result
    })
  } catch (error) {
    next({ msg: 'controller-图书归还失败', error });
  }
}

// 发布公告 
const release = async function (req, res, next) {
  try {
    const data = await PublicInfoModule.create(req.body)
    res.status(201).json({
      msg: '提交成功',
      info: data
    })
  } catch (error) {
    next({ msg: '发布出错', error })
  }
}

module.exports = {
  query, alter, increase, strikeOut, revert, queryBorrow, release
}